package com.ruoyi.vqms.service.impl;

import com.ruoyi.vqms.netty.HearBeatHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

//@Component
//public class NettyServerInit  implements CommandLineRunner {

//    private static final int PORT = 9004; // 服务器监听的端口号
//    private static final int PORT = 9166; // 服务器监听的端口号
//
//    @PostConstruct
//    public void init() {
//        // 创建两个 EventLoopGroup
//        EventLoopGroup bossGroup = new NioEventLoopGroup(); // 用于处理客户端连接
//        EventLoopGroup workerGroup = new NioEventLoopGroup(); // 用于处理网络读写
//
//        try {
//            // 创建 ServerBootstrap 实例
//            ServerBootstrap bootstrap = new ServerBootstrap();
//            bootstrap.group(bossGroup, workerGroup)
//                    .channel(NioServerSocketChannel.class) // 使用 NIO 传输通道
//                    .childHandler(new ChannelInitializer<SocketChannel>() { // 添加自定义的 ChannelHandler
//                        @Override
//                        protected void initChannel(SocketChannel ch) throws Exception {
//                            // 在这里添加自定义的业务逻辑处理器
//                            ch.pipeline().addLast(new HearBeatHandler());
//                        }
//                    })
//                    .option(ChannelOption.SO_BACKLOG, 128) // 设置 TCP 参数
//                    .childOption(ChannelOption.SO_KEEPALIVE, true); // 保持长连接
//
//            // 绑定端口并启动服务器
//            ChannelFuture future = bootstrap.bind(PORT).sync();
//            System.out.println("Netty 服务器启动，监听端口: " + PORT);
//
//            // 等待服务器关闭
//            future.channel().closeFuture().sync();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } finally {
//            // 优雅关闭 EventLoopGroup
//            workerGroup.shutdownGracefully();
//            bossGroup.shutdownGracefully();
//        }
//    }
//
//
//    @Override
//    public void run(String... args) throws Exception {
//        new Thread(() -> {
//            EventLoopGroup bossGroup = new NioEventLoopGroup();
//            EventLoopGroup workerGroup = new NioEventLoopGroup();
//
//            try {
//                ServerBootstrap bootstrap = new ServerBootstrap();
//                bootstrap.group(bossGroup, workerGroup)
//                        .channel(NioServerSocketChannel.class)
//                        .childHandler(new ChannelInitializer<SocketChannel>() {
//                            @Override
//                            protected void initChannel(SocketChannel ch) throws Exception {
//                                ch.pipeline().addLast(new HearBeatHandler());
//                            }
//                        })
//                        .option(ChannelOption.SO_BACKLOG, 128) // 设置 TCP 参数
//                        .childOption(ChannelOption.SO_KEEPALIVE, true); // 保持长连接
//
//                ChannelFuture future = bootstrap.bind(PORT).sync();
//                System.out.println("Netty 服务器启动，监听端口: " + PORT);
//                future.channel().closeFuture().sync(); // 这里会阻塞，但不会影响主线程
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            } finally {
//                bossGroup.shutdownGracefully();
//                workerGroup.shutdownGracefully();
//            }
//        }).start(); // 启动新线程
//    }

//}
